/**
 * 页面支持 xone 组件的基础混入
 */
export default {
  data() {
    return {
      // xone id
      xid: undefined,
      // 页面数据
      xdata: {
        _xruntime: {}, // xone 运行时数据
      },
      xmeta: {

      },
    }
  },
  watch: {
    // 页面数据日志，开启消耗性能
    xdata: {
      handler(newName) {
        this.xmetaCache = {}
        console.log('xone xdata:', newName);
      },
      immediate: true,
      deep: true
    }
  },
  onLoad(query) {
    this.xmetaCache = {}

    // xone id 初始化，实际就是页面实例的索引，该 id 用于 xone 找到页面实例
    this.xid = String(getCurrentPages().findIndex(v=>v.$vm===this))
  },
  methods: {
    /**
     * 获取 xone 根组件实例
     */
    getXOne() {
      return this.$refs.xone
    },
    /**
     * 调用页面的实例的函数
     */
    invokeHostMethod(name, ...args) {
      let method = this[name]
      return method&&method(...args)
    },
    /**
     * 调用 xone 实例的函数
     */
    invokeXOneMethod(name, ...args) {
      let xone = this.getXOne()
      let method = xone&&xone[name]
      return method&&method(...args)
    },

    /**
     * 获取运行时数据，如果没有生成数据
     */
    getRuntimeData(field) {
      return this.xdata[this.xruntimeDataPath][field]
    },
    setRuntimeData(field, value) {
      this.$set(this.xdata[this.xruntimeDataPath], field, value)
      return value
    },
  }
}